package com.shrct.businessprocess.product;

import com.shrct.businessprocess.organization.RCEnterprise;
import com.shrct.businessprocess.organization.RCSupplier;
import com.shrct.businessprocess.product.IHasProductMetaType;
import com.shrct.businessprocess.product.RCProductEvent;
import com.shrct.businessprocess.product.RCProductMetaType;
import com.shrct.businessprocess.product.RCProductSpecification;
import com.shrct.businessprocess.product.impl.RCProductEntryImpl;
import com.shrct.businessprocess.product.proxy.RCProductEntryProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import edu.fudan.mylang.pf.INamedModelObject;
import java.util.Collection;

@EntityImplementation(implementBy = RCProductEntryImpl.class)
public interface RCProductEntry extends IModelObject, INamedModelObject, IHasProductMetaType {
  public abstract String getProjectId();
  
  public abstract RCProductEntry setProjectId(final String projectId);
  
  public abstract RCEnterprise getEnterprise();
  
  public abstract RCProductEntry setEnterprise(final RCEnterprise enterprise);
  
  public abstract String getLocation();
  
  public abstract RCProductEntry setLocation(final String location);
  
  public abstract String getBranch();
  
  public abstract RCProductEntry setBranch(final String branch);
  
  public abstract RCSupplier getSupplier();
  
  public abstract RCProductEntry setSupplier(final RCSupplier supplier);
  
  public abstract RCProductSpecification getType();
  
  public abstract RCProductEntry setType(final RCProductSpecification type);
  
  public abstract String getSid();
  
  public abstract RCProductEntry setSid(final String sid);
  
  public abstract String getNormalizedSid();
  
  public abstract RCProductEntry setNormalizedSid(final String normalizedSid);
  
  public abstract String getEntityName();
  
  public abstract Integer getCount();
  
  public abstract Collection<? extends RCProductEvent> getEvents();
  
  public abstract RCProductMetaType getProductMetaType();
  
  /**
   * 与一次采购相关的所有同批次设备，可能分布在不同的场所，如耗材
   */
  public abstract Iterable<RCProductEntry> allRelatedProducts();
  
  public abstract RCProductEntryProxy toProxy();
}
